#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+2;
int n,L;
struct node{
    int x,y;
}pas[maxn],nxt[maxn],pa[maxn],pb[maxn];
bool isa[maxn],isb[maxn];
void insert_a(node d){
    for(int i=29;i>=0;i--){
        if(!(d.x&(1<<i)))continue;
        if(!isa[i]){isa[i]=1,pa[i].x=d.x,pa[i].y=d.y;break;}
        else d.x^=pa[i].x,d.y^=pa[i].y;
    }
    return ;
}
void reinit(){
    for(int i=0;i<30;i++)isb[i]=0;
    return ;
}
void insert_b(node d){
    for(int i=29;i>=0;i--){
        if(!(d.x&(1<<i)))continue;
        if(!isb[i]){isb[i]=1,pb[i].x=d.x,pb[i].y=d.y;break;}
        else d.x^=pb[i].x,d.y^=pb[i].y;
    }
    return ;
}
node getmax(int x){
    node ret=(node){x,-1},pas;
    for(int i=29;i>=0;i--){
        pas=ret,ret=(node){0,-1};
            ret.x=max(ret.x,pas.x);
            if(isb[i]){
                if(pb[i].y)ret.y=max(ret.y,pas.x^pb[i].x);
                else ret.x=max(ret.x,pas.x^pb[i].x);
            }
        if(pas.x!=-1){
            ret.y=max(ret.y,pas.y);
            if(isb[i]){
                if(pb[i].y)ret.x=max(ret.x,pas.y^pb[i].x);
                else ret.y=max(ret.y,pas.y^pb[i].x);
            }
        }
    }
    return ret;
}
int main(){
    freopen("lock.in","r",stdin);
    freopen("lock.out","w",stdout);
    scanf("%d%d",&n,&L);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&pas[i].x,&pas[i].y);
        insert_a(pas[i]);
        nxt[i]=pas[i];
    }
    int now=0,ans=0,sum=0,nv;
    for(int i=29;i>=0;i--){
        if((now&(1<<i))!=(L&(1<<i))){
            if(L&(1<<i)){
                reinit();
                for(int j=1;j<=n;j++)insert_b((node){nxt[j].y,(nxt[j].x>>i)&1});
                node d=getmax(sum);
                ans=max(ans,d.x);
            }
            if(!isa[i])break;
            now^=pa[i].x,sum^=pa[i].y;
        }
        else {
            if(L&(1<<i)){
                reinit();
                for(int j=1;j<=n;j++)insert_b((node){nxt[j].y,(nxt[j].x>>i)&1});
                node d=getmax(sum);
                ans=max(ans,d.y);
            }
        }
        for(int j=1;j<=n;j++)if(nxt[j].x&(1<<i))nxt[j].x^=pa[i].x,nxt[j].y^=pa[i].y;
    }
    if(now==L){
        reinit();
        for(int j=1;j<=n;j++)insert_b((node){nxt[j].y,0});
        node d=getmax(sum);
        ans=max(ans,d.x);
    }
    printf("%d\n",ans);
    return 0;
}